﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Diagram
{
    [Serializable]
    public class Interfejs : ElementNaDiagramie, ModelUML.iInterfejs 
    {
        public Interfejs(ModelUML.InterfejsUML interfejs)
        {
            element = interfejs;
            interfejs.lista_iKlas.Add(this);
            operacje = new List<Operacja>();
            for (int i = 0; i < interfejs.IloscOperacji; i++)
            {
                Operacja ope = new Operacja(interfejs.GetOperacje(i));
                ope.ShowInGui = false;
                operacje.Add(ope);
            }
        }
        private List<Operacja> operacje;
        private void UsunOperacjeNr(int num)
        {
            operacje.RemoveAt(num);
        }
        public void UsunOperacje(Operacja ope)
        {
            int poz = operacje.IndexOf(ope);
            foreach (Interfejs kd in ((ModelUML.InterfejsUML)element).lista_iKlas)
            {
                kd.UsunOperacjeNr(poz);
            }
            ((ModelUML.InterfejsUML)element).UsunOperacje((ModelUML.OperacjaUML)ope.element);
        }

        public Operacja DodajOperacje(Operacja operacja)
        {
            operacje.Add(operacja);

            foreach (Interfejs kd in ((ModelUML.InterfejsUML)element).lista_iKlas)
            {
                if (kd != this)
                {
                    Operacja tmpOp = new Operacja((ModelUML.OperacjaUML)operacja.element);
                    tmpOp.ShowInGui = false;
                    kd.operacje.Add(tmpOp);
                }
            }
            return operacja;

        }
        public Operacja DodajOperacje(String nazwa, String typ)
        {
            ModelUML.OperacjaUML op = ((ModelUML.InterfejsUML)element).DodajOperacje(nazwa, typ);
            Operacja opDiag = new Operacja(op);
            operacje.Add(opDiag);

            foreach (Interfejs kd in ((ModelUML.InterfejsUML)element).lista_iKlas)
            {
                if (kd != this)
                {
                    Operacja tmpOp = new Operacja(op);
                    tmpOp.ShowInGui = false;
                    kd.operacje.Add(tmpOp);
                }
            }
            return opDiag;
        }
        public int IloscOperacji
        {
            get
            {
                return operacje.Count;
            }
        }
        public Operacja GetOperacje(int index)
        {
            return operacje[index];
        }
    }
}
